﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.kfft
    快速Fourier变换
    void kfft(int n, int k, double pr[], double pi[], double fr[], double fi[], int flag)
    参数 n: 采样点数。
    参数 k: 观测序列长度？
    参数 pr: pr[n]存放采样输入(或变换)的实部。返回变换(或逆变换)的模。
    参数 pi: pi[n]存放采样输入(或变换)的虚部。返回变换(或逆变换)的幅角。
    参数 fr: fr[n]返回变换(或逆变换)的实部。
    参数 fi: fi[n]返回变换(或逆变换)的虚部。
    参数 flag: flag存放标志。flag=0表示作变换；flag=1表示作逆变换。
    */

    public static string drive_kfft()
    {
        int i, j;
        double[] pr = new double[64];
        double[] pi = new double[64];
        double[] fr = new double[64];
        double[] fi = new double[64];
        for (i = 0; i <= 63; i++)
        {
            pr[i] = Math.Exp(-0.1 * (i + 0.5));
            pi[i] = 0.0;
        }

        string rs = "";
        rs += gl.html_table("采样输入序列 pr", pr);
        rs += gl.html_table("采样输入序列 pi", pi);

        gl.kfft(64, 6, pr, pi, fr, fi, 0);

        rs += gl.html_table("采样序列p的变换的实部 fr", fr);
        rs += gl.html_table("采样序列p的变换的虚部 fi", fi);
        rs += gl.html_table("采样序列p的变换的模 pr", pr);
        rs += gl.html_table("采样序列p的变换的幅角 pi", pi);

        // 逆变换
        gl.kfft(64, 6, fr, fi, pr, pi, 1);

        rs += gl.html_table("逆变换的实部 pr", pr);
        rs += gl.html_table("逆变换的虚部 pi", pi);
        rs += gl.html_table("逆变换的模 fr", fr);
        rs += gl.html_table("逆变换的幅角 fi", fi);

        return rs;
    }
}